

#include <cegfx/cevirtualclock.h>
#include <Windows.h>

ceVirtualClock* ceVirtualClock::clock = 0;

ceVirtualClock::ceVirtualClock ()
{
	PrivTick ();
}

ceVirtualClock* ceVirtualClock::Acquire ()
{
	if (!ceVirtualClock::clock)
	{
		ceVirtualClock::clock = new ceVirtualClock ();
	}

	return ceVirtualClock::clock;
}



void ceVirtualClock::Tick ()
{
	ceVirtualClock::Acquire ()->PrivTick ();
}


long ceVirtualClock::GetMilliseconds ()
{
	return ceVirtualClock::Acquire ()->PrivGetMilliseconds ();
}

long ceVirtualClock::GetCurrentMilliseconds ()
{
	static LARGE_INTEGER freq, counter;
	if (	!QueryPerformanceFrequency (&freq)
		||	!QueryPerformanceCounter (&counter))
	{
		return GetTickCount ();
	}
	else
	{
		return (counter.QuadPart * 1000) / freq.QuadPart;
	}
}


void ceVirtualClock::PrivTick ()
{
	time = ceVirtualClock::GetCurrentMilliseconds ();
}

long ceVirtualClock::PrivGetMilliseconds ()
{
	return time;
}

